#include <stdlib.h>
#include <stdio.h>
#include <stdint.h>
#include <string.h>
#include "http.h"

int my_data_recv_callback(ft_http_client_t* http, const char* data, int size, int total, void* user) {
    // 在这里执行自定义数据处理操作
    return 0; // 返回0表示继续接收数据
}

int main(int argc, char **argv)
{
    printf("Usage:http-client\n");
    // 初始化 HTTP 库
    ft_http_init();

    // 使用 ft_http_new 函数创建一个 HTTP 客户端对象，然后使用 ft_http_destroy 函数销毁它。
    ft_http_client_t* http = ft_http_new();

    // 设置请求超时时间：使用 ft_http_set_timeout 函数可以设置请求的超时时间。
    ft_http_set_timeout(http, 5000); // 设置超时时间为 5 秒

    // 发起同步请求：使用 ft_http_sync_request 函数可以发起一个同步的 HTTP 请求。这个函数返回一个指向响应数据的指针。
    const char* url = "https://www.baidu.com";
    const char* response = ft_http_sync_request(http, url, M_GET);

    if (response != NULL) {
        // 处理响应数据
        printf("Response: %s\n", response);
    } else {
        // 处理请求错误
        int error_code = ft_http_get_error_code(http);
        printf("Request failed with error code: %d\n", error_code);
    }

    // 使用 ft_http_sync_download_file 函数可以下载文件。
    const char* url2 = "https://example.com/file.txt";
    const char* filepath = "downloaded_file.txt";
    int result = ft_http_sync_download_file(http, url2, filepath);

    if (result == ERR_OK) {
        printf("File downloaded successfully.\n");
    } else {
        int error_code = ft_http_get_error_code(http);
        printf("Download failed with error code: %d\n", error_code);
    }

    // 设置数据接收回调函数：使用 ft_http_set_data_recv_cb 函数可以设置数据接收回调函数，以便在接收数据时执行自定义操作。
    ft_http_set_data_recv_cb(http, my_data_recv_callback, NULL);

    // 销毁 HTTP 客户端对象
    ft_http_destroy(http);

    // 在这里执行其他操作

    // 退出 HTTP 客户端：最后，在你不再需要使用 HTTP 客户端时，使用 ft_http_exit 函数退出客户端。
    ft_http_exit(http);

    // 反初始化 HTTP 库
    ft_http_deinit();

    return 0;
}